package com.gtw.mediator;

/**
 * 用于各个同事角色之间的通信,所以必须依赖各个同事角色
 * 优点:
 *      减少类之间的依赖,同事类只依赖中介,减少依赖,也降低类之间的耦合
 * 缺点:
 *      中介者会膨胀的很大,而且逻辑复杂
 * 使用场景:
 *      多个对象之间紧密耦合:在类图中出现蜘蛛网结构(并不是说一个类依赖多个类的情况),有利于把蜘蛛网梳理成星型结构,使混乱关系变的清晰
 * 实际应用:
 *      1.调度系统
 *      2.MVC框架,C就是一个中介者
 *      3.中介服务
 */
public abstract class Mediator {
    //定义同事类
    protected ConcreteColleague1 cc1;
    /**
     * 同事类虽然有抽象,但没有每个同事类必须完成的业务,如果每个同事类都有相同的方法,如:execute(),可以注入抽象类
     */
    protected ConcreteColleague2 cc2;

    public abstract void doSomething();

    public ConcreteColleague1 getCc1() {
        return cc1;
    }

    //中介可以只有部分同事类,所以用set()方法注入
    public void setCc1(ConcreteColleague1 cc1) {
        this.cc1 = cc1;
    }

    public ConcreteColleague2 getCc2() {
        return cc2;
    }

    public void setCc2(ConcreteColleague2 cc2) {
        this.cc2 = cc2;
    }
}
